package edu.ptu.shortlink.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import edu.ptu.shortlink.project.dao.entity.ShortLinkDO;
import edu.ptu.shortlink.project.dto.req.ShortLinkBatchCreateReqDTO;
import edu.ptu.shortlink.project.dto.req.ShortLinkCreateReqDTO;
import edu.ptu.shortlink.project.dto.req.ShortLinkPageReqDTO;
import edu.ptu.shortlink.project.dto.req.ShortLinkUpdateReqDTO;
import edu.ptu.shortlink.project.dto.resp.ShortLinkBatchCreateRespDTO;
import edu.ptu.shortlink.project.dto.resp.ShortLinkGroupCountQueryRespDTO;
import edu.ptu.shortlink.project.dto.resp.ShortLinkCreateRespDTO;
import edu.ptu.shortlink.project.dto.resp.ShortLinkPageRespDTO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.List;

/**
 * @BelongsProject: shortlink
 * @BelongsPackage: edu.ptu.shortlink.project.service
 * @Author: HYJ
 * @CreateTime: 2025-04-26  21:09
 * @Description: 短链接持久接口层
 * @Version: 1.0
 */
public interface IShortlinkService extends IService<ShortLinkDO> {
    /**
     * 新增短链接
     *
     * @param requestParam 请求参数
     * @return 短链接响应对象
     */
    ShortLinkCreateRespDTO createShortLink(ShortLinkCreateReqDTO requestParam);

    /**
     * 短链接分页查询
     *
     * @param requestParam 分页请求参数
     * @return IPage分页接口
     */
    IPage<ShortLinkPageRespDTO> pageShortLink(ShortLinkPageReqDTO requestParam);

    /**
     * 统计短链接数量
     *
     * @param gIds 分组标识
     * @return 短链接数量响应对象
     */
    List<ShortLinkGroupCountQueryRespDTO> countShortLink(List<String> gIds);

    /**
     * 修改短链接
     *
     * @param requestParam 修改请求参数
     */
    void updateShortLink(ShortLinkUpdateReqDTO requestParam);

    /**
     * 短链接重定向
     *
     * @param shortUri 短链接标识
     * @param req      请求对象
     * @param resp     响应对象
     */
    void redirectUrl(String shortUri, HttpServletRequest req, HttpServletResponse resp) throws IOException;

    /**
     * 批量创建短链接
     *
     * @param requestParam 批量创建请求参数
     * @return 批量创建短链接响应对象
     */
    ShortLinkBatchCreateRespDTO batchCreateShortLink(ShortLinkBatchCreateReqDTO requestParam);
}
